package com.java.laixiangdong.express.view;

import com.java.laixiangdong.express.dao.Dao;

import java.util.Scanner;

public class View {

    private View() {
    }

    private static View v = new View();

    public static View getInstance() {
        return v;
    }

    Scanner scan = new Scanner(System.in);

    private Dao dao = Dao.getInstance();

    /**
     * 欢迎使用提示
     */
    public void welcome() {
        System.out.println("================================");
        System.out.println("欢迎使用XXX快递系统");
    }

    /**
     * 提示输入身份信息
     *
     * @return 身份值 1. 快递员    2. 用户
     */
    public int start() {
        System.out.println("请选择您的身份\n"
                + "1. 快递员    2. 用户    0.保存并退出");
        String input;
        int n;
        input = scan.nextLine();
        try {
            n = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("您输入有误，请重新输入");
            return start();
        }
        if (n < 0 || n > 2) {
            System.out.println("您输入有误，请重新输入");
            return start();
        }
        return n;
    }

    /**
     * 提示快递员选择要进行的操作
     *
     * @return 选择结果 1. 快递录入 2. 删除快递 3. 修改快递 4. 查询所有快递
     */
    public int choose() {
        System.out.println("请选择您要进程的操作\n" +
                "\t1. 快递录入\n" +
                "\t2. 删除快递\n" +
                "\t3. 修改快递\n" +
                "\t4. 查询所有快递");
        String input;
        int n;
        input = scan.nextLine();
        try {
            n = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("您输入有误，请重新输入");
            return choose();
        }
        if (n < 1 || n > 4) {
            System.out.println("您输入有误，请重新输入");
            return choose();
        }
        return n;
    }

    /**
     * 添加快递时提示用户输入快递单号
     *
     * @return 单号
     */
    public int inputNewExpressOdd() {
        System.out.println("请输入快递单号：");
        String oddInput = scan.nextLine();
        int odd;
        try {
            odd = Integer.parseInt(oddInput);
        } catch (NumberFormatException e) {
            System.out.println("您输入有误，请重新输入");
            return inputNewExpressOdd();
        }
        if (odd < 0) {
            System.out.println("单号是大于0的整数，请重新输入");
            return inputNewExpressOdd();
        }
        if (dao.hasOdd(odd)) {
            System.out.println("已有此单号，请重新输入");
            return inputNewExpressOdd();
        }
        return odd;
    }

    /**
     * 提示用户输入快递公司名称
     *
     * @return 公司名称
     */
    public String inputExpressCompany() {
        System.out.println("请输入快递公司：");
        return scan.nextLine();
    }

    /**
     * 删除时提示用户输入快递单号
     *
     * @return 单号
     */
    public int inputDelExpressOdd() {
        System.out.println("请输入要删除的快递单号：");
        return inputExpressOdd();
    }

    /**
     * 修改时提示用户输入快递单号
     *
     * @return 单号
     */
    public int inputModifyExpressOdd() {
        System.out.println("请输入要修改的快递单号：");
        return inputExpressOdd();
    }

    /**
     * 输入单号方法
     *
     * @return 单号
     */
    public int inputExpressOdd() {
        int n;
        String input = scan.nextLine();
        try {
            n = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("您输入有误，请重新输入：");
            return inputExpressOdd();
        }
        if (n < 0) {
            System.out.println("单号是大于0的整数，请重新输入：");
            return inputExpressOdd();
        }
        return n;
    }

    /**
     * 提示用户输入取件码
     *
     * @return 取件码
     */
    public int inputExpressCode() {
        System.out.println("请输入取件码：");
        int n;
        String input = scan.nextLine();
        try {
            n = Integer.parseInt(input);
        } catch (NumberFormatException e) {
            System.out.println("您输入有误，请重新输入：");
            return inputExpressOdd();
        }
        if (n < 0) {
            System.out.println("取件码是大于0的整数，请重新输入：");
            return inputExpressOdd();
        }
        return n;
    }

}
